//专门处理题目的业务逻辑topicModel
// 1. express 框架
const express = require('express');
const topicModel = require('../../model/topicModel');
// 导入jwt token工具
const JwtUtil = require('../../utils/jwt');
// 导入生成id的包
const { v4: uuidv4 } = require('uuid');
// 2.创建一个后台路由
const router = express.Router();

// 发布题目
router.post('/add', async (req, res) => {
    let { user_name, topic_type, topic_content, topic_analysis, exam_time, exam_type, topic_lib_id, topic_options, topic_val, topic_answer, topic_lib_name } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        // 用户身份
        let user_id = result.data;
        // 题目标记 生成随机字符串
        let topic_id = uuidv4();
        await topicModel.add(user_name, topic_id, topic_type, topic_content, topic_analysis, exam_time, exam_type, topic_lib_id, user_id, topic_options, topic_val, topic_answer, topic_lib_name).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})

// 删除题目(用户自己删除)
router.post('/remove', async (req, res) => {
    let { topic_id } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let user_id = result.data;
        await topicModel.remove(topic_id, user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 删除题目（管理员删除）
router.post('/delete', async (req, res) => {
    let { topic_id } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await topicModel.delete(topic_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 题目列表（全部）
router.get('/list2', async (req, res) => {
    let { page_num, page_size } = req.query;
    await topicModel.list2(page_num, page_size).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 题目列表（我的）
router.get('/list', async (req, res) => {
    let { page_num, page_size } = req.query;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    }
    else {
        let user_id = result.data;
        await topicModel.list(page_num,page_size,user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 题目详情
router.get('/detail', async (req, res) => {
    let { topic_lib_id } = req.query;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await topicModel.detail(topic_lib_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 搜索题目
router.get('/search', async (req, res) => {
    let { keyword } = req.query;
    await topicModel.search(keyword).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 统计题目
router.get('/total', async (req, res) => {
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let user_id = result.data;
        await topicModel.total(user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})

// 获取题型对应数量
router.post('/topic_type_total', async (req, res) => {
    let token = req.headers.token;
    let {topic_lib_id, topic_type} = req.body;
    console.log({ topic_lib_id, topic_type })
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let user_id = result.data;
        await topicModel.topic_type_total(topic_lib_id, topic_type).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})
// 导出题目路由
module.exports = router;